/*
 ============================================================================
 Page	     : 501-502
 Name        : binbit.c
 Date	     : 20210407
 Author      : Hbue 18060333
 Copyright   : Your copyright notice
 Description : 使用位操作显示二进制
 ============================================================================
 */

#include <stdio.h>
#include <limits.h>			// 提供CHAR_BIT的定义,CHAR_BIT表示每字节的位数
char *itobs(int, char *);
void show_bstr(const char *);

int main(void)
{
	char bin_str[CHAR_BIT * sizeof(int) + 1];
	int number = 0;

	puts("Enter integers and see them in binary.");
	puts("Non-numeric input terminates program.");
	while(scanf("%d", &number) == 1)
	{
		itobs(number, bin_str);
		printf("%d is ", number);
		show_bstr(bin_str);
		putchar('\n');
	}
	puts("Bye!");

	return 0;
}

char *itobs(int n, char *ps)
{
	const static int size = CHAR_BIT * sizeof(int);

	for(int i = size - 1; i >= 0; i--, n >>= 1)
	{
		ps[i] = (01 & n) + '0';
	}
	ps[size] = '\0';

	return ps;
}

/* 4位一组显示二进制字符串 */
void show_bstr(const char *string)
{
	int i = 0;

	while(string[i])	/* 不是一个空字符串 */
	{
		putchar(string[i]);
		if(++i % 4 == 0 && string[i])
		{
			putchar(' ');
		}
	}
}

